#解释器模式

#一、解释器模式的优点和应用场景
#优点：
#1、在语法分析的场景中，具有比较好的扩展性。规则修改和制订比较灵活。

#应用场景：
#1、若一个问题重复发生，可以考虑使用解释器模式。这点在数据处理和日志处理过程中使用较多，当数据的需求方需要将数据纳为己用时，必须将数据“翻译”成本系统的数据规格；同样的道理，日志分析平台也需要根据不同的日志格式翻译成统一的“语言”。2、特定语法解释器。如各种解释型语言的解释器，再比如自然语言中基于语法的文本分析等。

#二、解释器模式的缺点
#1、解释规则多样化会导致解释器的爆炸；2、解释器目标比较单一，行为模式比较固定，因而重要的模块中尽量不要使用解释器模式。


class PlayContext():
    play_text = None


class Expression():
    def interpret(self, context):
        if len(context.play_text) == 0:
            return
        else:
            play_segs = context.play_text.split(" ")
            for play_seg in play_segs:
                pos = 0
                for ele in play_seg:
                    if ele.isalpha():
                        pos += 1
                        continue
                    break
                play_chord = play_seg[0:pos]
                play_value = play_seg[pos:]
                self.execute(play_chord, play_value)

    def execute(self, play_key, play_value):
        pass


class NormGuitar(Expression):
    def execute(self, key, value):
        print ("Normal Guitar Playing--Chord:%s Play Tune:%s" % (key, value))


if __name__ == "__main__":
    context = PlayContext()
    context.play_text = "C53231323 Em43231323 F43231323 G63231323"
    guitar = NormGuitar()
    guitar.interpret(context)
